package 剑指Offer._5160;

import java.util.ArrayList;
import java.util.List;

/**
 * @author yzh
 * @version 1.0
 * @date 2021/11/19 12:25
 * 和为s的连续正数序列
 * 输入一个正整数 target ，输出所有和为 target 的连续正整数序列（至少含有两个数）。
 * 序列内的数字由小到大排列，不同序列按照首个数字从小到大排列。
 * 算法：双指针 - 滑动窗口
 */
public class _57II {

    public int[][] findContinuousSequence(int target) {
        List<int[]> ans = new ArrayList<>();
        for (int l = 1, r = 2; l < r;) {
            int sum = (l + r) * (r - l + 1) >> 1;
            if (sum == target) {
                int[] tmp = new int[r - l + 1];
                for (int i = l; i <= r; i++) tmp[i - l] = i;
                ans.add(tmp);
                ++l;
            } else if (sum < target) ++r;
            else ++l;
        }
        return ans.toArray(new int[ans.size()][]);
    }

}
